package gestionBulletins.controller;

import gestionBulletins.model.Adherent;
import gestionBulletins.model.Section;
import gestionBulletins.model.persistance.DaoSection;
import gestionBulletins.view.InfosAdherentWindow;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JOptionPane;

/**
 * Le Listener d'evenements sur la vue graphique d'infos des Adhérents, en particulier les JTextField
 * et les boutons
 * @author Paraita Wohler
 *
 */
public class InfosAdherentWindowActionListener implements ActionListener, FocusListener {

	protected InfosAdherentWindow target;

	/**
	 * Constructeur
	 * @param w la fenetre parente
	 */
	public InfosAdherentWindowActionListener(InfosAdherentWindow w) {
		super();
		target = w;
	}

	/**
	 * permet de vérifier si le formulaire est correcte
	 * @return vrai si le formulaire est valide, sinon faux
	 */
	private boolean verifierFormulaire() {

		if ("".compareTo(target.inputNom.getText()) == 0) {
			return false;
		}

		if ("".compareTo(target.inputPrenom1.getText()) == 0) {
			return false;
		}

		if ("jour".compareTo(target.inputDateJour.getText()) == 0) {
			return false;
		}

		if ("mois".compareTo(target.inputDateMois.getText()) == 0) {
			return false;
		}

		if ("année".compareTo(target.inputDateAnnee.getText()) == 0) {
			return false;
		}

		if ("".compareTo(target.inputIle.getText()) == 0) {
			return false;
		}

		if ("".compareTo(target.inputCommune.getText()) == 0) {
			return false;
		}

		if (("".compareTo(target.inputTelBureau.getText()) == 0) && 
				("".compareTo(target.inputTelDomicile.getText()) == 0) &&
				("".compareTo(target.inputVini.getText()) == 0)) {
			return false;
		}

		return true;
	}

	/**
	 * remet à zero le formulaire dans la vue parente
	 */
	private void resetFormulaire() {
		target.resetFormulaire();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		//System.out.println(e.getSource() + "cliqué !");

		if (e.getSource() == target.inputHasCard) {
			if (target.inputHasCard.isSelected()) {
				target.inputNumElecteur.setEnabled(true);
			}
			else {
				target.inputNumElecteur.setEnabled(false);
			}
		}
		if (e.getSource() == target.inputHasVoted) {
			target.inputNumBureau.setEnabled(true);
		}
		else {
			target.inputNumBureau.setEnabled(false);
		}

		if (e.getSource() == target.boutonAjouter) {
			if (verifierFormulaire()) {
				Adherent a = target.adherent;
				a.setEtatCivil((String)target.inputEtatCivil.getSelectedItem());
				a.setNom(target.inputNom.getText());
				a.setPrenom1(target.inputPrenom1.getText());
				a.setDateNaissanceJour(target.inputDateJour.getText());
				a.setDateNaissanceMois(target.inputDateMois.getText());
				a.setDateNaissanceAnnee(target.inputDateAnnee.getText());
				a.setNomDEpouse(target.inputNomDEpouse.getText());
				a.setPrenom2(target.inputPrenom2.getText());
				a.setPrenom3(target.inputPrenom3.getText());
				a.setAdresse(target.inputAdresse.getText());
				a.setCommune(target.inputCommune.getText());
				a.setIle(target.inputIle.getText());
				a.setTelDomicile(target.inputTelDomicile.getText());
				a.setTelBureau(target.inputTelBureau.getText());
				a.setVini(target.inputVini.getText());
				a.setProfession(target.inputProfession.getText());
				a.setReligion(target.inputReligion.getText());												
				a.setSituationFamiliale((String)target.inputSituationFamiliale.getSelectedItem());
				a.setNomConjoint(target.inputNomConjoint.getText());
				a.setPrenomConjoint(target.inputPrenomConjoint.getText());
				a.setNbEnfants(target.inputNbEnfants.getText());
				a.setNumBureau(target.inputNumBureau.getText());
				a.setNumElecteur(target.inputNumElecteur.getText());
				if (target.inputHasCard.isSelected()) {
					a.setHasCard("Y");
				}
				else {
					a.setHasCard("N");
				}
				if (target.inputHasVoted.isSelected()) {
					a.setHasVoted("Y");
				}
				else {
					a.setHasVoted("N");
				}
				/* en fonction du president de section on recupere l'id de la section */
				DaoSection ds = target.getDaoFactory().getDaoSection();
				String inputSection = (String)target.inputSections.getSelectedItem();
				/* on verifie s'il est bien dans une section ou pas */
				if (inputSection.compareTo("dans aucune section") == 0) {
					a.setSect(0);
				}
				else {
					Section section = ds.requestByPresident(inputSection);
					a.setSect(section.getId());
				}
				target.daoFactory.getDaoAdherent().update(a);
				/*
				String nbEnfants = target.inputNbEnfants.getText();
				System.out.println(nbEnfants);
				if (nbEnfants.compareTo("") != 0 && Integer.parseInt(target.inputNbEnfants.getText()) > 0) {
					int shouldAddEnfantsNow = JOptionPane.showConfirmDialog(target,
							"Voulez-vous ajouter les enfants maintenant ?",
							"ajouter enfants",
							JOptionPane.YES_NO_OPTION);
					if (shouldAddEnfantsNow == 0) {
						new AddEnfantWindow(target.getDaoFactory(),
											a.getId(),
											Integer.parseInt(target.inputNbEnfants.getText())).setVisible(true);
					}
				}
				 */
				target.notifyObservers();
				//System.out.println("adhérent ajouted !");
				//System.out.println("observers should ne notified ! xD");
				target.setVisible(false);
			}
			else {
				JOptionPane.showMessageDialog(target, "Erreur de saisie ! vérifiez le formulaire svp");
			}
		}

		if (e.getSource() == target.boutonReset) {
			resetFormulaire();
		}

		if (e.getSource() == target.boutonFermer) {
			resetFormulaire();
			target.disableModif();
			target.setVisible(false);
		}

		if (e.getSource() == target.boutonActiverModifs) {
			if (target.boutonActiverModifs.getText().compareTo("Modifier") == 0) {
				target.enableModif();
			} else {
				target.disableModif();
			}
		}
	}

	@Override
	public void focusGained(FocusEvent e) {
		//System.out.println("just entered: " + e.getSource());
		if (e.getSource() == target.inputDateJour) {
			if(target.inputDateJour.getText().compareTo("jour") == 0) {
				target.inputDateJour.setText("");
			}
		}
		if (e.getSource() == target.inputDateMois) {
			if(target.inputDateMois.getText().compareTo("mois") == 0) {
				target.inputDateMois.setText("");
			}
		}
		if (e.getSource() == target.inputDateAnnee) {
			if(target.inputDateAnnee.getText().compareTo("année") == 0) {
				target.inputDateAnnee.setText("");
			}
		}


	}

	@Override
	public void focusLost(FocusEvent e) {
		//System.out.println("just left: " + e.getSource());
		if (e.getSource() == target.inputDateJour) {
			if(target.inputDateJour.getText().length() == 0) {
				target.inputDateJour.setText("jour");
			}
		}
		if (e.getSource() == target.inputDateMois) {
			if(target.inputDateMois.getText().length() == 0) {
				target.inputDateMois.setText("mois");
			}
		}
		if (e.getSource() == target.inputDateAnnee) {
			if(target.inputDateAnnee.getText().length() == 0) {
				target.inputDateAnnee.setText("année");
			}
		}
	}

}
